package org.jiamandan.com.strategy.impl.tram.listener;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jiamandan.com.constant.BizConstant;
import org.jiamandan.com.dto.ZDBasicDto;
import org.jiamandan.com.strategy.impl.tram.IZDListenerService;
import org.jiamandan.com.utils.CommonUtil;
import org.springframework.stereotype.Service;

/**
 * @version Revision 1.0.1
 * @版权：版权所有 (c) 2021
 * @see:
 * @创建日期：2022-12-12 14:00
 * @功能说明： 嘉满电-YD下发充电应答

 * @begin
 * @修改记录:
 * @修改后版本 修改人        修改内容
 * @2022-12-01 16:50	        CWJ       	创建
 * @end
 */
@Service(value = BizConstant.CmdClass.CMD_YD_82_SERVICE)
@AllArgsConstructor
@Slf4j
public class YDIssueChargeListenerService implements IZDListenerService {


    @Override
    public void doExecute(ZDBasicDto dto, Channel client) throws Exception {
        String deviceNo = StrUtil.toString(Integer.parseInt(CommonUtil.reverseHex(dto.getDeviceNo()).substring(2), 16));
        String data = dto.getData();
        log.info("接收嘉满电-YD下发充电设备应答报文(CMD=82)【"+deviceNo+"】报文:" + JSON.toJSONString(dto));
        String isCharge = StringUtils.substring(data, 0, 2);
        log.info("是否充电成功(CMD=82)【"+deviceNo+"】报文:" + switchReply(isCharge));
        //设备充电状态 0 执行成功（启动或停止充电），=1 端口未插充电器（不执行），=2 端口状态和充电命令相同（不执行），
        //=3 端口故障（执行），=4 无此端口号（不执行），=5 有多个待充端口（响应 FF 充电命令，不执行），=6 多路设备功率超标（不执行），
        //7=存储器损坏，8=（预检-继电器坏或保险丝断），9=（预检-继电器粘连）（执行给充电），0x0A=（预检-负载短路）。
        String orderNo = StringUtils.substring(data, 2, 34);
        log.info("订单号={}",orderNo);
        if (isCharge.equals("01")) {
            // 端口未插充电器
            log.info("端口未插充电器");
        }
        if (isCharge.equals("02")) {
            // 设备已在充电中，再重复下发充电
            log.info("重复下发充电");
        }
        if (isCharge.equals("0a")) {
            // 负载短路
            log.info("负载短路");
        }
    }



    private static String switchReply(String value){
        switch (value){
            case "00":
                return "执行成功";
            case "01":
                return "端口未插充电器";
            case "02":
                return "端口状态和充电命令相同";
            case "03":
                return "端口故障";
            default:
                return "故障："+value;
        }
    }
}
